from django.urls import reverse
from django.http import JsonResponse
from django.utils.translation.trans_null import activate
from django_redis import get_redis_connection
from django.shortcuts import render,HttpResponse,redirect
from django import forms

from utils.group import NbSearchGroup, get_search_group_condition,Option
from utils.link import filter_reverse
from utils.pager import Pagination
from web import models
from django.conf import settings

from utils.reponse import BaseResponse
from utils.code import get_code,send_sms
from web.forms import account_form
from web.forms.account_form import LeveModelForm
from django.db.models import Q


# 客户界面展示,本人交易记录
def my_transaction_list(request):
    # 优化1：组合搜索功能模块
    search_group = NbSearchGroup(request,models.TransactionRecord,
                                 Option('charge_type', is_multi=True, text_func=lambda x: x[1],
                                        value_func=lambda x: x[0]),  # 代表choices多选
                                 Option('customer', is_multi=True, text_func=lambda x: x.username,
                                        value_func=lambda x: x.id),  # 代表ForeignKey关联的数据表
                                 )
    # 产生charge_type的搜索条件： 在models.TransactionRecord.objects.filter(**conn)中使用
    conn = search_group.get_condition

    # 优化2：添加输入框查找功能
    keyword = request.GET.get("keyword", "").strip()  # 获取前端提交需要查找的数据
    print("添加查找功能",type(keyword))
    # 以Q方法查找内容实现
    q1 = Q()
    if keyword:
        q1.connector = 'OR'
        # 不同字段的关键字搜索 包含条件 唯一订单号
        q1.children.append(('order_oid__contains', keyword))
    #查询当前登录用户的所有交易记录数据 id倒叙
    queryset = models.TransactionRecord.objects.filter(customer_id=request.nb_user.id,customer__active=1,active=1).filter(q1).filter(**conn).order_by("-id")
    pager = Pagination(request=request, query_set=queryset) #使用分页组件打包数据与分页功能



    context = {
        "pager":pager,
        "keyword": keyword,
        "search_group":search_group #传一个对象 数据传到html前端 用于生成html界面选项 【search_group.get_row_list】
               }
    return render(request, 'my_transaction_list.html',context)

# 管理员界面展示,所有人交易记录
def transaction_list(request):
    # 优化1：组合搜索功能模块
    search_group = NbSearchGroup(request, models.TransactionRecord,
                                 Option('charge_type', is_multi=True, text_func=lambda x: x[1],
                                        value_func=lambda x: x[0]),  # 代表choices多选
                                 Option('customer', is_multi=True, text_func=lambda x: x.username,
                                        value_func=lambda x: x.id),  # 代表ForeignKey关联的数据表
                                 )
    # 产生charge_type的搜索条件： 在models.TransactionRecord.objects.filter(**conn)中使用
    conn = search_group.get_condition

    # 优化2：添加输入框查找功能
    keyword = request.GET.get("keyword", "").strip()  # 获取前端提交需要查找的数据
    print("添加查找功能", type(keyword))
    # 以Q方法查找内容实现
    q1 = Q()
    if keyword:
        q1.connector = 'OR'
        # 不同字段的关键字搜索 包含条件
        q1.children.append(('order_oid__contains', keyword))
        q1.children.append(('customer__username__contains', keyword)) #客户名字 跨到用户表找name
    # 查询当前登录用户的所有交易记录数据 id倒叙
    queryset = models.TransactionRecord.objects.filter(customer__active=1,
                                                       active=1).filter(q1).filter(**conn).order_by("-id")
    pager = Pagination(request=request, query_set=queryset)  # 使用分页组件打包数据与分页功能
    context = {
        "pager": pager,
        "keyword": keyword,
        "search_group": search_group  # 传一个对象 数据传到html前端 用于生成html界面选项 【search_group.get_row_list】
    }
    return render(request, 'transaction_list.html',context)